//
//  MyRxTableViewDelegateProxy.swift
//  AKTest
//
//  Created by ZDST2018 on 2021/8/30.
//

import UIKit
//class MyRxTableViewDelegateProxy2 : RxTableViewDelegateProxy{
//
//
//}

class MyRxTableViewDelegateProxy: DelegateProxy<UITableView,UITableViewDelegate>, UITableViewDelegate, DelegateProxyType{
    

    static func registerKnownImplementations() {
        self.register {
            MyRxTableViewDelegateProxy.init(parentObject: $0, delegateProxy: self)
        }
    }
    
    static func currentDelegate(for object: UITableView) -> UITableViewDelegate? {
        return object.delegate
    }
    
    static func setCurrentDelegate(_ delegate: UITableViewDelegate?, to object: UITableView) {
        object.delegate = delegate
    }
}

private extension Selector {
    
    static let didSelectRowAtIndexPath =  #selector(UITableViewDelegate.tableView(_ : didSelectRowAt:))
    static let viewForHeaderInSection = #selector(UITableViewDelegate.tableView(_ : viewForHeaderInSection :))
}
extension UITableView{

    var rxDelegate: RxTableViewDelegateProxy {
        get{
            return  RxTableViewDelegateProxy.proxy(for: self)
        }
    }

    var rxDidSelectRowAtIndexPath: Observable<(UITableView, NSIndexPath)>{
        get{
            rxDelegate.methodInvoked(.didSelectRowAtIndexPath).map {
                return($0[0] as! UITableView, $0[1] as! NSIndexPath)
            }
        }
    }
    var rxViewForHeaderInSection: Observable<(UITableView, NSIndexPath)>{
        get{
            rxDelegate.methodInvoked(.viewForHeaderInSection).map {
                return($0[0] as! UITableView, $0[1] as! NSIndexPath)
            }
        }
    }
    
//    func abc(tab: UITableView, se: Int) -> UIView{
//        return UIView.init()
//    }
//    func ccc(fc :(UITableView, Int) -> UIView) {
//
//    }
//    func ddd() {
//        ccc(fc: abc)
//    }
}

